property ancestor
property pTarget,fnHandler

on new me,hnd,inst,argsCount
  me.ancestor = (script "scrLambda").new(argsCount)
  me.fnHandler = hnd
  me.pTarget = inst
  return me
end

on ApplyList me,params
  return me.invokeHandler(me.fnHandler,me.pTarget,params)
end

on invokeHandler me, hnd,inst,args
  case args.count() of
    0 : return call(hnd,inst)
    1 : return call(hnd,inst,args[1])
    2 : return call(hnd,inst,args[1],args[2])
    3 : return call(hnd,inst,args[1],args[2],args[3])
    4 : return call(hnd,inst,args[1],args[2],args[3],args[4])
    5 : return call(hnd,inst,args[1],args[2],args[3],args[4],args[5])
    6 : return call(hnd,inst,args[1],args[2],args[3],args[4],args[5],args[6])
    7 : return call(hnd,inst,args[1],args[2],args[3],args[4],args[5],args[6],args[7])
    8 : return call(hnd,inst,args[1],args[2],args[3],args[4],args[5],args[6],args[7],args[8])
    9 : return call(hnd,inst,args[1],args[2],args[3],args[4],args[5],args[6],args[7],args[8],args[9])
    10 : return call(hnd,inst,args[1],args[2],args[3],args[4],args[5],args[6],args[7],args[8],args[9],args[10])
    11 : return call(hnd,inst,args[1],args[2],args[3],args[4],args[5],args[6],args[7],args[8],args[9],args[10],args[11])
    12 : return call(hnd,inst,args[1],args[2],args[3],args[4],args[5],args[6],args[7],args[8],args[9],args[10],args[11],args[12])
    13 : return call(hnd,inst,args[1],args[2],args[3],args[4],args[5],args[6],args[7],args[8],args[9],args[10],args[11],args[12],args[13])
    14 : return call(hnd,inst,args[1],args[2],args[3],args[4],args[5],args[6],args[7],args[8],args[9],args[10],args[11],args[12],args[13],args[14])
    15 : return call(hnd,inst,args[1],args[2],args[3],args[4],args[5],args[6],args[7],args[8],args[9],args[10],args[11],args[12],args[13],args[14],args[15])
    16 : return call(hnd,inst,args[1],args[2],args[3],args[4],args[5],args[6],args[7],args[8],args[9],args[10],args[11],args[12],args[13],args[14],args[15],args[16])
    otherwise: return LingoF_InvokeHandler(string(hnd),inst,args)
  end case
end 